(function(window) {

    "use strict"
    //游戏对象 裁判
    //游戏对象可以管理整个游戏相关的对象(蛇、食物对象、地图对象)
    //属性: 1.蛇 2.食物 3.地图
    // 方法: 1.游戏开始 2.游戏结束
    function Game(target) {
        this.snake = new Snake();
        this.food = new Food();
        this.map = target;
    }
    Game.prototype.render = function() {
        //把蛇和食物渲染到页面
        this.snake.render(this.map);
        this.food.render(this.map);
    }
    Game.prototype.startGame = function() {
        //把this给that变量代替 让定时器里能拿到game这个实例对象
        var that = this;
        var timer = setInterval(function() {
            //拿到蛇的move方法
            that.snake.move(that.map, that.food);
            //蛇撞墙 游戏结束
            //判断的是 蛇头和四面墙的关系
            //移动一次就要判断一次
            //写在定时器里 在move之后写。因为先移动了才判断 是否撞墙
            //添加蛇撞墙逻辑
            //1.获取蛇头坐标
            //2.再来做判断
            var head = that.snake.body[0];
            if (
                head.x >= that.map.offsetWidth / that.snake.width ||
                head.x < 0 ||
                head.y < 0 ||
                head.y >= that.map.offsetHeight / that.snake.height
            ) {
                //蛇头撞了右边的墙了
                clearInterval(timer);
                alert('game over！！！');
            }

            //蛇撞到自己
            // 判断蛇头坐标和身体的坐标是否一致 
            //for循环蛇身体 ，判断每一节身体坐标和蛇头是否重和了
            //蛇撞到自己了游戏结束
            //写在定时器里 move方法之后移动一次就要判断一次
            for (var i = 4; i < that.snake.body.length; i++) {
                //判断的是蛇头和身体 所以不能从0开始 那样就会拿到蛇头
                var temp = that.snake.body[i]; //蛇身体的每一节坐标信息
                // console.log(temp);
                if (head.x === temp.x && head.y === temp.y) {
                    //这样才表示蛇吃到自己a
                    clearInterval(timer);
                    alert('game over！！！');
                }
            }

        }, 100);

        //控制蛇移动
        //注册keyup事件
        //写在start Game里面 
        //注意this的指向问题 这里面的this指向的是document所以用that来表示game实例对象
        document.addEventListener('keyup', function(e) {
            var keyCode = e.keyCode;
            if (keyCode == 37) {
                // if (that.snake.direction = 'right') {
                //     //此时蛇正在往右移动
                //     return;
                // }
                that.snake.direction = 'left';
            } else if (keyCode == 38) {
                // if (that.snake.direction = 'down') {
                //     //此时蛇正在往下移动
                //     return;
                // }
                that.snake.direction = 'up';
            } else if (keyCode == 39) {
                // if (that.snake.direction = 'left') {
                //     //此时蛇正在往左移动
                //     return;
                // }
                that.snake.direction = 'right'
            } else if (keyCode == 40) {
                // if (that.snake.direction = 'up') {
                //     //此时蛇正在往上移动
                //     return;
                // }
                that.snake.direction = 'down'
            }
        });
    };


    //暴露出去
    window.Game = Game;
})(window);